Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Spec for IsWindowControlsOverlayEnabled.md #4613

Open
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

tochukwuIbeEkeocha
Copy link
Contributor

@tochukwuIbeEkeocha tochukwuIbeEkeocha commented Jun 4, 2024

What

These new APIs introduce support for a Webview2 Window Controls Overlay. The Window Controls Overlay will allow developers to build apps in webview2 with 100% of the UI controlled by the browser process. Devs will be able to create their apps as borderless & caption-less windows, and have the Webview draw its own window control buttons (minimize,maximize, close, restore).

image image

@tochukwuIbeEkeocha tochukwuIbeEkeocha added the API Proposal Review WebView2 API Proposal for review. label Jun 4, 2024
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from 2038eac to e886ba5 Compare June 4, 2024 22:17
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch 2 times, most recently from 657def7 to d395730 Compare June 7, 2024 22:18
@david-risney david-risney requested review from aluhrs13 and vickiez June 12, 2024 17:03
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
specs/IsWindowControlsOverlayEnabled.md Outdated Show resolved Hide resolved
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch 7 times, most recently from 3866c89 to bce67e9 Compare August 28, 2024 21:54
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from bce67e9 to 700ec3a Compare September 4, 2024 20:19
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from 700ec3a to 654b176 Compare September 11, 2024 22:30
@ahqsoftwares
Copy link

Is there any ETA on when this update might come to webview2?

@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from 654b176 to 5a4eb5f Compare October 28, 2024 20:47
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Show resolved Hide resolved
specs/WindowControlsOverlayConfiguration.md Outdated Show resolved Hide resolved
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from 2f02f47 to b38a178 Compare November 4, 2024 23:34
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from b38a178 to a6cc969 Compare November 13, 2024 22:25
@tochukwuIbeEkeocha tochukwuIbeEkeocha force-pushed the api-isWindowControlsOverlayEnabled-draft branch from a6cc969 to 01a2caf Compare January 28, 2025 00:16
# Background
This API allows you to enable and configure the Webview2 Window Controls Overlay.
The Overlay is a region on the top right/left of the webview window which contains
the caption buttons (minimize, maximize, restore, close). Enabing the Overlay allows
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
the caption buttons (minimize, maximize, restore, close). Enabing the Overlay allows
the caption buttons (minimize, maximize, restore, close). Enabling the Overlay allows

CHECK_FAILURE(coreWebView2->QueryInterface(&coreWebView2_28));

wil::com_ptr<ICoreWebView2WindowControlsOverlaySettings> windowControlsOverlaySettings;
CHECK_FAILURE(coreWebView2_28->get_WindowControlsOverlaySettings(&wco_config));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

different variable names, wco_config & windowControlsOverlaySettings

/// title bar area. Defaults to 48px. There is no minimum height restriction for this API,
/// so it is up to the developer to make sure that the height of your window controls overlay
/// is enough that users can see and interact with it. We recommend using GetSystemMetrics(SM_CYCAPTION)
// as you minimum height.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// as you minimum height.
// as your minimum height.

/// The Overlay buttons will sit on top of the HTML content, and will prevent mouse interactions
/// with any elements directly below it, so you should avoid placing content there.
/// To that end, there are four [CSS environment vairables](https://developer.mozilla.org/en-US/docs/Web/API/Window_Controls_Overlay_API#css_environment_variables)
/// titlebar-area-x, titlebar-area-y, titlebar-area-width defined to help you
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing height variable

/// To that end, there are four [CSS environment vairables](https://developer.mozilla.org/en-US/docs/Web/API/Window_Controls_Overlay_API#css_environment_variables)
/// titlebar-area-x, titlebar-area-y, titlebar-area-width defined to help you
/// get the dimensions of the available titlebar area to the left of the overlay.
/// Similarly the navigator object wil contain a [WindowControlsOverlay property](https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Similarly the navigator object wil contain a [WindowControlsOverlay property](https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay)
/// Similarly the navigator object will contain a [WindowControlsOverlay property](https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay)


/// The `TitleBarBackgroundColor` property allows you to set a background color
/// for the overlay. Based on the background color you choose, Webview2
///will automatically calculate a foreground and hover color that will
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
///will automatically calculate a foreground and hover color that will
/// will automatically calculate a foreground and hover color that will


CoreWebView2WindowControlsOverlaySettings config = Webview2.CoreWebivew2.WindowControlsOverlaySettings;
config.IsEnabled = true;
config.color = Color.FromARGB(0, 0, 255);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the order of setting these properties matter? If I set enabled=true before setting .color might there be a frame rendered of the overlay with the default color?

[propget] HRESULT TitleBarBackgroundColor([out, retval] COREWEBVIEW2_COLOR* value);

/// The `TitleBarBackgroundColor` property allows you to set a background color
/// for the overlay. Based on the background color you choose, Webview2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the overlay, so why is it called TitleBarBackgroundColor? https://wicg.github.io/window-controls-overlay/#concepts suggests this color will apply to the controls overlay, not the "title bar area". Based on the API comments for IsEnabled "You are responsible for creating a title bar for your app" I understand us to have removed the title bar from being system-controlled UI.

Property name can be just "BackgroundColor" if it refers to the background color of the WindowControlsOverlay, since it's in the context of being a CoreWebView2WindowControlsOverlaySettings property.

///
/// When using this you should configure your app window to not display its default
/// window control buttons. You are responsible for creating a title bar for your app
/// by using the available space to the left of the controls overlay. In doing so,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this right or left conditional on the reading direction of the UI root?


/// The `TitleBarBackgroundColor` property allows you to set a background color
/// for the overlay. Based on the background color you choose, Webview2
///will automatically calculate a foreground and hover color that will
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is foreground color necessarily black or white? We might be leaving this undocumented to reserve the right to choose colors based on the hosting app?

/// The `TitleBarBackgroundColor` property allows you to set a background color
/// for the overlay. Based on the background color you choose, Webview2
///will automatically calculate a foreground and hover color that will
/// provide you the best contrast while maintaining accessibility.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"best" is subjective. I suggest documenting just which guarantees WebView2 is making regarding color and contrast. I suspect this is something like e.g. "WebView2 will use a foreground color that maintains at least 3:1 contrast radio with your chosen color."

/// for the overlay. Based on the background color you choose, Webview2
///will automatically calculate a foreground and hover color that will
/// provide you the best contrast while maintaining accessibility.
/// Defaults to #f3f3f3. This API supports transparency.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does it mean to "maintain accessibility" if the background color is transparent. I expect at that point we can't make any guarantee about the foreground color relative to the webview content. Is it in scope to consider that?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
API Proposal Review WebView2 API Proposal for review.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants